﻿namespace PropOnline.ViewModels.Shared
{
    using System.Linq;
    using System.Text;
    using PropOnline.Models;
    using PropOnline.Properties;

    public class ResultadoBarrioCalleMapaViewModel : ResultadoViewModelBase
    {
        public new BusquedaBarrioCalleMapaViewModel BusquedaViewModel
        {
            get
            {
                return base.BusquedaViewModel as BusquedaBarrioCalleMapaViewModel;
            }

            set
            {
                base.BusquedaViewModel = value;
            }
        }

        public string BusquedaTitle
        {
            get
            {                
                StringBuilder sb = new StringBuilder();

                if (this.BusquedaViewModel.TipoBusqueda == (int)TipoBusqueda.Calle)
                {
                    sb.Append(this.BusquedaViewModel.Calle);

                    sb.Append(" (");
                    if (!this.BusquedaViewModel.AlturaMax.HasValue && !this.BusquedaViewModel.AlturaMin.HasValue)
                    {
                        sb.Append(Resources.TodaLaCalle);
                    }

                    if (this.BusquedaViewModel.AlturaMin.HasValue)
                    {
                        sb.Append(Resources.Desde + this.BusquedaViewModel.AlturaMin);
                    }

                    if (this.BusquedaViewModel.AlturaMax.HasValue)
                    {
                        sb.Append(Resources.Hasta + this.BusquedaViewModel.AlturaMax);
                    }

                    sb.Append(")");
                }
                else
                {
                    if (this.BusquedaViewModel.BarriosOptions == null)
                    {
                        sb.Append(Resources.TodosLosBarrios);
                    }
                    else
                    {                        
                        var barrios =
                            this.BusquedaViewModel
                            .BarriosOptions
                            .Where(b => b.IsChecked)
                            .Union(this.BusquedaViewModel.BarriosOptions.Where(b => !b.IsChecked).SelectMany(b => b.Hijos.Where(h => h.IsChecked)))
                            .Select(b => b.Nombre)
                            .ToArray();

                        if (!barrios.Any())
                        {
                            sb.Append(Resources.TodosLosBarrios);
                        }
                        else
                        {
                            sb.Append(string.Join(" - ", barrios));
                        }
                    }
                }

                return sb.ToString();
            }
        }        
    }
}